#ifndef __VTOR_SHELL_H__
#define __VTOR_SHELL_H__

#ifdef __cplusplus
extern "C" {
#endif

#include "vtor_elec_module_config.h"
#include "vtor_string.h"

// 20240912
// 重大升级，
// 支持int，hex，string

#ifdef __VTOR_SHELL__

// 此宏无参数，为小内存单片机设计
// 若有需要，在config头文件内启用该宏
//#define __VTOR_SHELL_CONFIG_MINI__


typedef int32_t (*VtorShellFun)();

typedef struct VtorShellStruct
{
	VtorShellFun fun;
	const uint8_t* name;
}VtorShell;

extern VtorShell* vtorShellHeader;


// 内置参考函数：帮助，列表
void VtorShell_Void(void);
void VtorShell_Help(void);
void VtorShell_List(void);
int32_t VtorShell_Int(int32_t num);
int32_t VtorShell_String(uint8_t* str);
int32_t VtorShell_Call(uint32_t addr);
void VtorShell_WriteMem(int32_t addr, int32_t val);
int32_t VtorShell_ReadMem(int32_t addr);

// 时间戳，用于统计函数执行时间
int32_t VtorShell_GetTime(void);

// 打印参数、返回值、消耗时间等信息
void VtorShell_PrintRet(int32_t retVal, int32_t execTick);
void VtorShell_PrintArg(VtorShell* shell, uint8_t argc, int32_t* argv, int8_t* argt);

// 高级字符串操作:查找函数，查找参数
VtorShell* VtorShell_GetShell(uint8_t* str);
int32_t VtorShell_GetArg(uint8_t* str, int32_t* argv, int8_t* argt);


int32_t VtorShell_Exec(VtorShell* shell, uint8_t argc, int32_t* argv);
// vtorshell调用函数，扫描与初始化，执行
void VtorShell_Init(void);
int32_t VtorShell_Scan(uint8_t* userStr);
void VtorShell_PrintString(uint8_t* str);

#endif // __VTOR_SHELL__

#ifdef __cplusplus
}
#endif

#endif
